//方案四: 寄生组合式继承

//结合原型链继承和借用构造函数继承的方法,同时需要自己创建prototype,实现寄生组合式继承
//特点
/*
* 1.最完美的JS继承解决方案
* 2.父类私有的属性和方法,子类实例私有的属性和方法
* 3.父类公有的属性和方法,子类实例公有的属性和方法
* 4.子类实例修改公有的属性和方法不会影响父类的实例
* */

//父类构造函数
function Parent(x){
    this.x = x;
    this.sayHello = function (){
        console.log("sayHello")
    }
}
//父类原型
Parent.prototype.getX = function (){
    console.log("getX",this.x)
}
let p1 = new Parent(100);

//子类构造函数
function Child(y,x){
    Parent.call(this,666)
    this.y = y;
}
// Child.prototype = new Parent(100);
// Child.prototype = {};

Child.prototype = Object.create(Parent.prototype);
Child.prototype.constructor = Child;
Child.prototype.getY = function (){
    console.log("getY",this.y)
}
//子类实例
let c1 = new Child(200,666);


// Object.create(arg)  创建一个空的对象,并且让这个空对象的__proto__指向传递的第一个参数

Object.create = function(obj){
//IE浏览器不支持用户在JS代码中直接的修改或者使用__proto__
    // let newObj = {};
    // newObj.__proto__ = obj;
    // return newObj

    function NewObj(){}
    NewObj.prototype = obj;
    return new NewObj()
}



